package com.vvvsss.beetlsql;

import lombok.AccessLevel;
import lombok.Data;
import lombok.experimental.FieldDefaults;
import org.beetl.sql.core.annotatoin.ColumnIgnore;
import org.beetl.sql.core.annotatoin.Table;
import org.beetl.sql.experimental.iohao.core.$Mapper;
import org.beetl.sql.experimental.iohao.core.$Sql;

import java.util.List;

import static org.beetl.sql.experimental.iohao.core.SqlKit.mapper;

/**
 * create time : 2017-04-26 19:56
 *
 * @author luoyizhu@gmail.com
 */
@Data                                       // 提供getter setter toString 等方法
@FieldDefaults(level = AccessLevel.PRIVATE) // 属性默认都是private
@Table(name = "animal")                     // 实体类与表映射
public class BeeAnimal implements $Sql { // 实现$Sql接口可以在对象上使用save,update,delete方法(不是必须的)
    int id;
    int age;
    String name;
    String description;

    /** animal_info表的字段: 分布区域 */
    String regionName;

    @ColumnIgnore(update = true)
    public String getRegionName() {
        return regionName;
    }

    /**
     * 匠的追求, 极简之上.
     * 无注解 无实现类 无框架的强耦合. 直接可以使用.
     * 自定义sqlDao处理类. (如果没有自定义sql就没必要定义这个接口).
     */
    public interface Dao extends $Mapper<BeeAnimal> {
        Dao $ = mapper(Dao.class);

        List<BeeAnimal> findAnimals(int animalInfoId, int age);

        BeeAnimal findOne(String name, int animalInfoId, int age);
    }
}
